package main; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.TreeSet; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import groups.OPDept; import groups.ShopCustomers; import groups.Warehouse; import panels.AdminPanel; import panels.CustomerPanel; import panels.LogInPanel; import panels.OrderPanel; import subjects.Admin; import subjects.Customer; import subjects.Order; import subjects.Person; import subjects.Product; import subjects.ProductStock; import tables.CustomersTable; import tables.CustomersTableModel; import tables.OrdersTable; import tables.OrdersTableModel; import tables.StockTableModel; import tables.WarehouseTable; public class Gui implements ActionListener { /* LOG IN PANEL */ private LogInPanel logInPanel; private JButton login = new JButton("login"); /* CUSTOMER PANEL */ private CustomerPanel customerPanel; private JButton back1 = new JButton("back"); private JButton save = new JButton("save"); private JButton back6 = new JButton("back"); private JTextField addressText = new JTextField(); private JTextField emailText = new JTextField(); private JTextField phoneText = new JTextField(); /* ORDER PANEL */ private Warehouse warehouse = new Warehouse(); private OrderPanel orderPanel; private JButton addProduct = new JButton("Add Product to Order"); private JButton removeProduct = new JButton("Remove Product from Order"); private JButton viewOrder = new JButton("View Order"); private JButton viewHistory = new JButton("View History"); private JButton confirm = new JButton("Confirm Order"); private Order newOrder; private int i = 5; /* ADMIN PANEL */ private AdminPanel adminPanel; private JButton viewCustomers = new JButton("View Customers"); private JButton viewWarehouse = new JButton("View Warehouse"); private JButton viewOrders = new JButton("View Orders"); private JButton back2 = new JButton("Back"); // Customers private CustomersTable customersTable; private CustomersTableModel customersTableModel = new CustomersTableModel(); private JPanel customersTablePanel = new JPanel(); private JButton back3 = new JButton("Back"); // Products private StockTableModel stockTableModel = new StockTableModel(); private WarehouseTable warehouseTable; private JPanel warehouseTablePanel = new JPanel(); private JButton back4 = new JButton("Back"); // Orders private OrdersTableModel ordersTableModel = new OrdersTableModel(); private OrdersTable ordersTable; private JPanel ordersTablePanel = new JPanel(); private JButton back5 = new JButton("Back"); /* FRAME */ private JFrame frame = new JFrame("Order Management"); /* CUSTOMER */ private Customer customer; private ShopCustomers shopCustomers = new ShopCustomers(); /* ORDER DEPARTMENT */ private OPDept opdept = new OPDept(); /* ADMIN */ private Person admin = new Admin("admin", "a"); private JButton addStock = new JButton("Add Product"); private JButton removeStock = new JButton("Remove Product"); private JButton updateStock = new JButton("Update Stock"); /* FILTER */ private Filter filter = new Filter(); public Gui() { /* TEST */ Customer c1 = new Customer("ana", "ana", "cluj", "ana@mail.com", "0765456789"); Customer c2 = new Customer("maria", "maria", "cluj", "maria@mail.com", "0765479789"); Customer c3 = new Customer("dan", "dan", "cluj", "dan@mail.com", "0755479789"); Customer c4 = new Customer("calin", "calin", "cluj", "calin@mail.com", "0765471189"); shopCustomers.addCustomer(c1); shopCustomers.addCustomer(c2); shopCustomers.addCustomer(c3); shopCustomers.addCustomer(c4); Product p1 = new Product("curmale", 3); Product p2 = new Product("lapte cocos", 9); Product p3 = new Product("mere", 3); Product p4 = new Product("banane", 5); Product p5 = new Product("salata", 2); Product p6 = new Product("migdale", 9); Product p7 = new Product("nuca", 15); ProductStock sp1 = new ProductStock(p1, 3); ProductStock sp2 = new ProductStock(p2, 2); ProductStock sp3 = new ProductStock(p3, 1); ProductStock sp4 = new ProductStock(p4, 2); ProductStock sp5 = new ProductStock(p5, 3); ProductStock sp6 = new ProductStock(p6, 4); ProductStock sp7 = new ProductStock(p7, 2); warehouse.addProduct(sp7); warehouse.addProduct(sp6); warehouse.addProduct(sp5); warehouse.addProduct(sp4); warehouse.addProduct(sp3); warehouse.addProduct(sp2); warehouse.addProduct(sp1); Order o1 = new Order(1, c1); o1.addProduct(p1); o1.addProduct(p2); o1.addProduct(p3); Order o2 = new Order(2, c2); o2.addProduct(p7); o2.addProduct(p6); Order o3 = new Order(3, c3); o3.addProduct(p4); o3.addProduct(p5); Order o4 = new Order(4, c4); o4.addProduct(p3); o4.addProduct(p7); o4.addProduct(p4); opdept.addOrder(o1); opdept.addOrder(o2); opdept.addOrder(o3); opdept.addOrder(o4); /* LOGIN PANEL */ login.setActionCommand("login"); login.addActionListener(this); logInPanel = new LogInPanel(login); /* CUSTOMER PANEL */ customerPanel = new CustomerPanel(back1, save, addressText, emailText, phoneText); save.setActionCommand("save"); save.addActionListener(this); back1.setActionCommand("back1"); back1.addActionListener(this); /* ORDER PANEL */ orderPanel = new OrderPanel(addProduct, removeProduct, viewOrder, viewHistory, confirm, warehouse, back6); addProduct.addActionListener(this); addProduct.setActionCommand("add"); removeProduct.addActionListener(this); removeProduct.setActionCommand("removeProduct"); viewOrder.addActionListener(this); viewOrder.setActionCommand("viewOrder"); viewHistory.addActionListener(this); viewHistory.setActionCommand("viewHistory"); confirm.setActionCommand("confirm"); confirm.addActionListener(this); /* ADMIN PANEL */ adminPanel = new AdminPanel(viewCustomers, viewWarehouse, viewOrders, addStock, removeStock, updateStock, back2); viewCustomers.addActionListener(this); viewCustomers.setActionCommand("viewCust"); viewWarehouse.addActionListener(this); viewWarehouse.setActionCommand("viewWare"); viewOrders.addActionListener(this); viewOrders.setActionCommand("viewOrders"); addStock.setActionCommand("addStock"); addStock.addActionListener(this); removeStock.setActionCommand("removeStock"); removeStock.addActionListener(this); updateStock.setActionCommand("updateStock"); updateStock.addActionListener(this); // Display products //warehouse.serialize(); // Display customers //shopCustomers.serialize(); // Display orders //opdept.serialize(); back1.setActionCommand("back1"); back1.addActionListener(this); back2.addActionListener(this); back2.setActionCommand("back2"); back3.setActionCommand("back3"); back3.addActionListener(this); back4.setActionCommand("back4"); back4.addActionListener(this); back5.setActionCommand("back5"); back5.addActionListener(this); back6.setActionCommand("back6"); back6.addActionListener(this); frame.setSize(480, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.add(logInPanel); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("login")) { if (logInPanel.getName().equals(admin.getName()) && logInPanel.getPassword().equals(admin.getPassword())) { logInPanel.setVisible(false); adminPanel.setVisible(true); frame.add(adminPanel); } else { boolean found = false; for (Customer c : shopCustomers.getCustomers()) { if (c.getName().equals(logInPanel.getName()) && c.getPassword().equals(logInPanel.getPassword())) { found = true; customer = c; } } if (found) { newOrder = new Order(opdept.getOrders().size()+1, (Customer) customer); updateWarehouse(); orderPanel.add(warehouseTable, BorderLayout.CENTER); logInPanel.setVisible(false); orderPanel.setVisible(true); frame.add(orderPanel); } else { logInPanel.setVisible(false); customerPanel.setVisible(true); frame.add(customerPanel); } } } else if (e.getActionCommand().equals("back1")) { customerPanel.setVisible(false); logInPanel.setVisible(true); frame.add(logInPanel); } else if (e.getActionCommand().equals("save")) { customer = new Customer(logInPanel.getName(), logInPanel.getPassword(), addressText.getText(), emailText.getText(), phoneText.getText()); shopCustomers.addCustomer((Customer) customer); shopCustomers.serialize(); newOrder = new Order(opdept.getOrders().size()+1, (Customer) customer); customerPanel.setVisible(false); updateWarehouse(); orderPanel.add(warehouseTable, BorderLayout.CENTER); shopCustomers.serialize(); orderPanel.setVisible(true); frame.add(orderPanel); } else if (e.getActionCommand().equals("add")) { TreeSet<ProductStock> products; products = warehouse.deserialize(); String product = JOptionPane.showInputDialog("Enter Product"); boolean found = filter.filterProductStock(warehouse, product); if (found && filter.getFoundProductStock().getQuantity() != 0) newOrder.addProduct(filter.getFoundProductStock().product); else { JOptionPane.showMessageDialog(null, "Product not in stock at the moment"); } } else if (e.getActionCommand().equals("removeProduct")) { String product = JOptionPane.showInputDialog("Remove Product"); boolean found = filter.filterOrder(newOrder, product); if (found) { newOrder.removeProduct(filter.getFoundProduct()); } else { JOptionPane.showMessageDialog(null, "You haven't ordered that"); } } else if (e.getActionCommand().equals("viewOrder")) { String order = ""; int price = 0; for (Product p : newOrder.getProductList()) { order += p.getName() + "\n"; price += p.getPrice(); } order += "Total " + price; System.out.println(order); JOptionPane.showMessageDialog(null, order); } else if (e.getActionCommand().equals("viewHistory")) { String history = ""; int price = 0; for (Order o : opdept.deserialize()) { if (o.getCustomer().getName().equals(logInPanel.getName()) && o.getCustomer().getPassword().equals(logInPanel.getPassword())) { for (Product p : o.getProductList()) { history += p.getName() + "\n"; price += p.getPrice(); } } } history += "Total " + price; JOptionPane.showMessageDialog(null, history); } else if (e.getActionCommand().equals("confirm")) { for (Product p1 : newOrder.getProductList()) { boolean found = filter.filterProductStock(warehouse, p1.getName()); if (found) { int quantity = filter.getFoundProductStock().getQuantity(); ProductStock newStock = new ProductStock(p1, quantity - 1); warehouse.replaceProduct(filter.getFoundProductStock(), newStock); warehouse.serialize(); } } opdept.addOrder(newOrder); opdept.serialize(); JOptionPane.showMessageDialog(null, "Order confirmed"); } else if (e.getActionCommand().equals("back2")) { adminPanel.setVisible(false); logInPanel.setVisible(true); frame.add(logInPanel); } else if (e.getActionCommand().equals("viewCust")) { updateCustomers(); customersTablePanel.add(customersTable, BorderLayout.CENTER); customersTablePanel.add(back3, BorderLayout.SOUTH); adminPanel.setVisible(false); customersTablePanel.setVisible(true); frame.add(customersTablePanel); } else if (e.getActionCommand().equals("back3")) { customersTablePanel.setVisible(false); adminPanel.setVisible(true); frame.add(adminPanel); } else if (e.getActionCommand().equals("viewWare")) { updateWarehouse(); warehouseTablePanel.add(warehouseTable, BorderLayout.CENTER); warehouseTablePanel.add(back4, BorderLayout.SOUTH); adminPanel.setVisible(false); warehouseTablePanel.setVisible(true); frame.add(warehouseTablePanel); } else if (e.getActionCommand().equals("back4")) { warehouseTablePanel.setVisible(false); adminPanel.setVisible(true); frame.add(adminPanel); } else if (e.getActionCommand().equals("viewOrders")) { updateOrders(); ordersTablePanel.add(ordersTable, BorderLayout.CENTER); ordersTablePanel.add(back5, BorderLayout.SOUTH); ordersTablePanel.setVisible(true); adminPanel.setVisible(false); frame.add(ordersTablePanel); } else if (e.getActionCommand().equals("back5")) { ordersTablePanel.setVisible(false); adminPanel.setVisible(true); frame.add(adminPanel); } else if (e.getActionCommand().equals("back6")) { orderPanel.setVisible(false); logInPanel.setVisible(true); frame.add(logInPanel); } else if (e.getActionCommand().equals("addStock")) { boolean found = false; String name = JOptionPane.showInputDialog("Enter product name"); int price; int quantity; found = filter.filterProductStock(warehouse, name); if (found) { JOptionPane.showMessageDialog(null, "Products already exists in stock"); } else { price = Integer.parseInt(JOptionPane.showInputDialog("Enter price")); quantity = Integer.parseInt(JOptionPane.showInputDialog("Enter quantity")); Product newProduct = new Product(name, price); ProductStock newStock = new ProductStock(newProduct, quantity); warehouse.addProduct(newStock); warehouse.serialize(); } } else if (e.getActionCommand().equals("removeStock")) { String name = JOptionPane.showInputDialog("Enter product name"); ProductStock product = null; boolean found = filter.filterProductStock(warehouse, name); if (found) { product = filter.getFoundProductStock(); warehouse.removeProduct(product); warehouse.serialize(); } else JOptionPane.showMessageDialog(null, "Product not found in stock"); } else if (e.getActionCommand().equals("updateStock")) { String name = JOptionPane.showInputDialog("Enter product name"); ProductStock product = null; boolean found = filter.filterProductStock(warehouse, name); if (found) { int quantity = Integer.parseInt(JOptionPane.showInputDialog("Enter updated stock")); product = filter.getFoundProductStock(); product.displayProductStock(); product.setQuantity(quantity); product.displayProductStock(); warehouse.replaceProduct(filter.getFoundProductStock(), product); warehouse.serialize(); } else JOptionPane.showMessageDialog(null, "Product not found in stock"); } } public void updateWarehouse() { for (int j = stockTableModel.getRowCount() - 1; j >= 0; j--) { stockTableModel.removeProduct(j); } // warehouse.getProducts().clear(); TreeSet<ProductStock> products; products = warehouse.deserialize(); for (ProductStock p : products) { p.displayProductStock(); stockTableModel.addProduct(p); } warehouseTable = new WarehouseTable(stockTableModel); warehouseTablePanel.setLayout(new BorderLayout()); } public void updateCustomers() { for (int j = customersTableModel.getRowCount() - 1; j >= 0; j--) { customersTableModel.removeCustomer(j); } // shopCustomers.getCustomers().clear(); TreeSet<Customer> customers; customers = shopCustomers.deserialize(); for (Customer c : customers) { customersTableModel.addCustomer(c); } customersTable = new CustomersTable(customersTableModel); customersTablePanel.setLayout(new BorderLayout()); } public void updateOrders() { for (int j = ordersTableModel.getRowCount() - 1; j >= 0; j--) { ordersTableModel.removeOrder(j); } // opdept.getOrders().clear(); TreeSet<Order> orders; orders = opdept.deserialize(); for (Order o : orders) { ordersTableModel.addOrder(o); } ordersTable = new OrdersTable(ordersTableModel); ordersTablePanel.setLayout(new BorderLayout()); } }